﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Enterprise.Model.IRepositories;
using Enterprise.Model.Entities;
using Enterprise.Infrastructure.RepositoryFramework;
using System.Data.SqlClient;

namespace Enterprise.Infrastructure.Repositories
{
   public  class RepositorioDeTarefa : IRepositorioDeTarefa
    {

      public readonly Repositorio _repositorio;

        public RepositorioDeTarefa(IRepositorio repositorio) 
        {
            _repositorio = (Repositorio)repositorio;
        
        }

        public Tarefa Obter(int tarefaId)
        {
            var tarefa = _repositorio.Obter<Tarefa>("SELECT * FROM TBTarefa WHERE tarefaId=@tarefaId;", new SqlParameter("TarefaId", tarefaId) );
            return tarefa; 
            
        }

        public void Atualizar(Tarefa tarefa)
        {
            _repositorio.Executar(
              "UPDATE TBTarefa SET  DataDeInicio = @DataDeInicio , DataDeTermino = @DataDeTermino, DataParaPublicacao = @DataParaPublicacao, Tarefa = @Tarefa, CodigoDaTarefa = @CodigoDaTarefa, Esforco = @Esforco, DataDisponivelParaAprovacao = @DataDisponivelParaAprovacao, Aprovado = @Aprovado Where TarefaID = @TarefaId",
                  new SqlParameter("@DataDeInicio", tarefa.DataDeInicio),
                  new SqlParameter("@DataDeTermino", tarefa.DataDeTermino),
                  new SqlParameter("@DataParaPublicacao", tarefa.DataParaPublicacao),
                  new SqlParameter("@Tarefa", tarefa.Tarefa),
                  new SqlParameter("@CodigoDaTarefa", tarefa.CodigoDaTarefa),
                  new SqlParameter("@Esforco", tarefa.Esforco),
                  new SqlParameter("@DisponivelParaAprovacao", tarefa.DataDisponivelParaAprovacao),
                  new SqlParameter("@Aprovado", tarefa.Aprovado),
                  new SqlParameter("@TarefaId", tarefa.TarefaID)
                  );
        }

        public void Adicionar(Tarefa tarefa)
        {
            _repositorio.Executar(
             "INSERT INTO TBTarefa(DataDeInicio , DataDeTermino , DataParaPublicacao , Tarefa , CodigoDaTarefa , Esforco , DataDisponivelParaAprovacao , Aprovado) VALUES (@DataDeInicio , @DataDeTermino, @DataParaPublicacao, @Tarefa, CodigoDaTarefa = @CodigoDaTarefa, @Esforco, @DataDisponivelParaAprovacao, @Aprovado )",
                  new SqlParameter("@DataDeInicio", tarefa.DataDeInicio),
                  new SqlParameter("@DataDeTermino", tarefa.DataDeTermino),
                  new SqlParameter("@DataParaPublicacao", tarefa.DataParaPublicacao),
                  new SqlParameter("@Tarefa", tarefa.Tarefa),
                  new SqlParameter("@CodigoDaTarefa", tarefa.CodigoDaTarefa),
                  new SqlParameter("@Esforco", tarefa.Esforco),
                  new SqlParameter("@DisponivelParaAprovacao", tarefa.DataDisponivelParaAprovacao),
                  new SqlParameter("@Aprovado", tarefa.Aprovado)
                 );
        }

        public void Apagar(int tarefaId)
        {
            _repositorio.Executar("DELETE FROM TBTarefa where TarefaID = @TarefaId",
                new SqlParameter("@TarefaId", tarefaId));
        }

        public IEnumerable<Tarefa> Listar()
        {
            var tarefas = _repositorio.Listar<Tarefa>("SELECT * FROM TBTarefa ORDER BY 1 DESC");
            return tarefas; 
        }
    }
}
